1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
32
33 import javax.swing.*;
34 import javax.swing.table.AbstractTableModel;
35 import javax.swing.table.TableModel;
36 import java.awt.*;
37 import java.awt.image.BufferedImage;
38
39 public class bug6937798 {
40
41 public static void main(String... args) throws Exception {
42 UIManager.setLookAndFeel(new NimbusLookAndFeel());
43 SwingUtilities.invokeAndWait(new Runnable() {
44 public void run() {
45 new bug6937798();
46 }
47 });
48 }
49
50 public bug6937798() {
51 final JTable table = createCountryTable();
52 table.setShowGrid(true);
53 table.setSize(100, 100);
54
55 BufferedImage im = new BufferedImage(table.getWidth(), table.getHeight(), BufferedImage.TYPE_INT_ARGB);
56 Graphics g = im.getGraphics();
57 table.print(g);
58 g.dispose();
59
60 for (int i = 0; i < im.getHeight(); i++) {
61 for (int j = 0; j < im.getWidth(); j++) {
62 if (im.getRGB(i, j) == table.getGridColor().getRGB()) {
63 System.out.println("got it!");
64 return;
65 }
66 }
67 }
68 throw new RuntimeException("no table's grid detected....");
69 }
70
71 protected JTable createCountryTable() {
72
73 final String
74 [] headers = {
75 "Name", "Capital City", "Language(s)", "Monetary Unit(s)", "EC Member"
76 };
77
78
79 final Object[][] data = {
80 {"Albania", "Tirane", "Albanian, Greek", "Lek", new Boolean(false)},
81 {"Andorra", "Andorra la Vella", "Catalan, French, Spanish", "French Franc, Spanish Peseta", new Boolean(false)},
82 {"Austria", "Vienna", "German, Slovenian, Croatian", "Schilling", new Boolean(false)},
83 {"Belarus", "Minsk", "Byelorussian, Russian", "Belarusian Rubel", new Boolean(false)},
84 {"Belgium", "Brussels", "French, Flemish, German", "Belgian Franc", new Boolean(true)},
85 {"Bosnia & Herzegovina", "Sarajevo", "Serbo-Croatian", "Dinar", new Boolean(false)},
86 {"Bulgaria", "Sofia", "Bulgarian, Turkish", "Lev", new Boolean(false)},
87 {"Croatia", "Zagreb", "Serbo-Croatian", "Croatian Kuna", new Boolean(false)},
88 {"Czech Republic", "Prague", "Czech, Slovak", "Koruna", new Boolean(false)},
89 {"Denmark", "Copenhagen", "Danish", "Krone", new Boolean(true)},
90 {"Estonia", "Tallinn", "Estonian, Latvian, Lithuanian, Russian", "Estonian Kroon", new Boolean(false)},
91 {"Finland", "Helsinki", "Finnish, Swedish, Lappish", "Markka", new Boolean(false)},
92 {"France", "Paris", "French", "Franc", new Boolean(true)},
93 {"Germany", "Berlin", "German", "Deutsche Mark", new Boolean(true)},
94 {"Greece", "Athens", "Greek, English, French", "Drachma", new Boolean(true)},
95 {"Hungary", "Budapest", "Hungarian", "Forint", new Boolean(false)},
96 {"Iceland", "Reykjavik", "Icelandic", "Icelandic Krona", new Boolean(false)},
97 {"Ireland", "Dublin", "Irish, English", "Pound", new Boolean(true)},
98 {"Italy", "Rome", "Italian", "Lira", new Boolean(true)},
99 {"Latvia", "Riga", "Lettish, Lithuanian, Russian", "Lat", new Boolean(false)},
100 {"Liechtenstein", "Vaduz", "German", "Swiss Franc", new Boolean(false)},
101 {"Lithuania", "Vilnius", "Lithuanian, Polish, Russian", "Lita", new Boolean(false)},
102 {"Luxembourg", "Luxembourg", "French, German, Letzeburgesch", "Luxembourg Franc", new Boolean(true)},
103 {"Macedonia", "Skopje", "Macedonian, Albanian, Turkish, Serbo-Croatian", "Denar", new Boolean(false)},
104 {"Malta", "Valletta", "Maltese, English", "Maltese Lira", new Boolean(false)},
105 {"Moldova", "Chisinau", "Moldovan, Russian", "Leu", new Boolean(false)},
106 {"Monaco", "Monaco", "French, English, Italian", "French Franc", new Boolean(false)},
107 {"the Netherlands", "Amsterdam", "Dutch", "Guilder", new Boolean(true)},
108 {"Norway", "Oslo", "Norwegian", "Krone", new Boolean(false)},
109 {"Poland", "Warsaw", "Polish", "Zloty", new Boolean(false)},
110 {"Portugal", "Lisbon", "Portuguese", "Escudo", new Boolean(true)},
111 {"Romania", "Bucharest", "Romanian", "Leu", new Boolean(false)},
112 {"Russia", "Moscow", "Russian", "Ruble", new Boolean(false)},
113 {"San Marino", "San Marino", "Italian", "Italian Lira", new Boolean(false)},
114 {"Slovakia", "Bratislava", "Slovak, Hungarian", "Koruna", new Boolean(false)},
115 {"Slovenia", "Ljubljana", "Slovenian, Serbo-Croatian", "Tolar", new Boolean(false)},
116 {"Spain", "Madrid", "Spanish", "Peseta", new Boolean(true)},
117 {"Sweden", "Stockholm", "Swedish", "Krona", new Boolean(false)},
118 {"Switzerland", "Bern", "German, French, Italian", "Swiss Franc", new Boolean(false)},
119 {"Turkey", "Ankara", "Turkish", "Turkish Lira", new Boolean(false)},
120 {"Ukraine", "Kiev", "Ukranian, Russian, Romanian, Polish, Hungarian", "Hryvnia", new Boolean(false)},
121 {"United Kingdom", "London", "English, Welsh", "British Pound", new Boolean(true)},
122 {"Yugoslavia", "Belgrade", "Serbo-Croatian, Slovenian, Macedonian", "Dinar", new Boolean(false)},
123 };
124
125
126 TableModel dataModel = new AbstractTableModel() {
127
128 public int getColumnCount() {
129 return headers.length;
130 }
131
132 public int getRowCount() {
133 return data.length;
134 }
135
136 public Object getValueAt(int row, int col) {
137 return data[row][col];
138 }
139
140 public String getColumnName(int column) {
141 return headers[column];
142 }
143
144 public Class getColumnClass(int col) {
145 return getValueAt(0, col).getClass();
146 }
147
148 public void setValueAt(Object aValue, int row, int column) {
149 data[row][column] = aValue;
150 }
151
152 public boolean isCellEditable(int row, int col) {
153 return (col == 4);
154 }
155 };
156
157
158 JTable countryTable = new JTable(dataModel);
159 countryTable.setGridColor(Color.pink);
160 countryTable.setBackground(Color.white);
161 countryTable.setForeground(Color.black);
162 return countryTable;
163 }
164 }